home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 051-075 / disk_067 / wheel / wheel3.4 (.txt) < prev    next >
AmigaBASIC Source Code  |  1992-05-06  |  24KB  |  1,058 lines

  1.  
  2. '*---------^---------*`
  3. '|  Wheel Of Fortune |`
  4. '<        by         >`
  5. '|    Hari Wiguna    |`  Last Mod:
  6. '*---------v---------*`  12/20/1986
  7.  
  8. CLEAR,45000: DEFINT a-z: RANDOMIZE TIMER
  9. Debug=0: GOSUB InitCode
  10. IF Debug=0 THEN ON BREAK GOSUB CleanUp: BREAK ON
  11.  
  12.   MainLoop:
  13. WHILE Play
  14. Start:  
  15.   IF Debug THEN LOCATE 1,1: PRINT "Bas";FRE(0);" Sys";FRE(-1);" Stk";FRE(-2)
  16.   MENU ON
  17.   IF PuzCons=o THEN
  18.     IF PuzVow THEN
  19.       IF Score(pNow)>=250 THEN
  20.         c$="You Have to Buy a Vowel"
  21.       ELSE
  22.         CALL Spread(Who$(pNow),"You Have to SOLVE the Puzzle"): GOTO Solve
  23.       END IF
  24.     ELSE
  25.       GOSUB Solved: GOTO Start
  26.     END IF
  27.   ELSE
  28.     c$="You May SPIN"
  29.     IF Score(pNow)>=250 THEN c$=c$+", BUY a Vowel"
  30.   END IF
  31.   c$=c$+", or SOLVE the Puzzle."
  32.   CALL Spread(Who$(pNow),c$)
  33.  
  34. Start2:
  35.   MENU ON
  36.   GOSUB WaitBtn: MENU OFF
  37.   IF BtnHit>=o THEN ON BtnHit+l GOTO Spin,BuyV,Solve,VolDown,VolUp
  38.   IF Play THEN GOTO Start2 :ELSE GOTO EndLoop2
  39.  
  40. Spin:
  41.   IF PuzCons THEN GOSUB Spinner :ELSE Start
  42.   IF Spin=-1 THEN'     { Bankrupt }
  43.     IF Talk THEN SAY TRANSLATE$("Oh No!")
  44.     GOSUB FailTune: Score(pNow)=o: p=pNow: GOSUB prScore: GOTO BadSpin
  45.   ELSEIF Spin=-2 THEN' { Loose Turn }
  46.     IF Talk THEN SAY TRANSLATE$("uh oh!")
  47.     GOSUB FailTune: GOTO BadSpin
  48.   ELSEIF Spin=-3 THEN' { Free Spin }
  49.     IF Talk THEN SAY TRANSLATE$("Free Spin!")
  50.     GOSUB FreeTune
  51.     Free(pNow)=Free(pNow)+l: p=pNow: GOSUB prScore: GOTO Start
  52.   ELSEIF Spin=-4 THEN' { Prize }
  53.     GOTO Start
  54.   ELSE               ' { Consonant }  
  55.     GOSUB PickCons: GOSUB CheckIt
  56.     IF Yes THEN GOTO Start
  57.   END IF
  58. BadSpin:
  59.   GOSUB HasF: IF Yes THEN GOTO Start :ELSE GOTO NextP
  60.  
  61. BuyV:
  62.   IF Score(pNow)>=250 THEN
  63.     GOSUB PickVowel: GOSUB CheckIt
  64.     IF Yes THEN
  65.       Score(pNow)=Score(pNow)-250: GOTO EndLoop
  66.     ELSE
  67.       GOTO NextP
  68.     END IF
  69.   ELSE
  70.     GOSUB Bleep: GOTO Start
  71.   END IF
  72.  
  73. Solve:
  74.   IF PuzCons=o THEN
  75.     a$=" No More Consonants, You would have to solve the puzzle!"
  76.   ELSE
  77.     a$=" So you think you know what it is, eh?"
  78.   END IF
  79.   WINDOW 2,a$,(o,o)-(631,7),o
  80.   LINE INPUT a$
  81.   WINDOW CLOSE 2
  82.   GOSUB Strip'(a$)
  83.   IF a$=Puz$ THEN
  84.     GOSUB Solved: GOTO Start
  85.   ELSE
  86.     GOSUB FailTune: GOTO NextP
  87.   END IF
  88.  
  89. VolUp:
  90.   IF vol<=255-vs THEN vol=vol+vs :ELSE GOSUB Bleep
  91.   GOTO FeedBack:
  92. VolDown:
  93.   IF vol>=vs THEN vol=vol-vs :ELSE GOSUB Bleep
  94. FeedBack:
  95.   SOUND 700,1,vol,o: SOUND 700,1,vol,1
  96. GOTO Start2
  97.  
  98. NextP:
  99.   p=pNow' Save Prev Player
  100.   
  101. NextP2:
  102.   IF pNow<=pMax THEN pNow=pNow+l :ELSE pNow=l
  103.   IF LEFT$(Who$(pNow),l)="-" THEN GOTO NextP2
  104.   GOSUB prScore'(p) { De-Hilite previous player }
  105.   
  106. EndLoop:
  107.   p=pNow: GOSUB prScore
  108. EndLoop2:
  109. WEND            
  110.  
  111. GOTO CleanUp
  112.  
  113.   FreeTune:
  114. FOR i=17 TO 25
  115.   SOUND i*160,0.5,vol,o: SOUND i*160,0.5,vol,l
  116. NEXT
  117. RETURN
  118.  
  119.   FailTune:
  120. FOR ft=12 TO 1 STEP -1
  121.   SOUND ft*100,1,vol,2
  122.   SOUND ft*100,1,vol,3
  123. NEXT
  124. WHILE INKEY$<>"": WEND
  125. RETURN
  126.  
  127. Spinner:
  128. v=10+RND(l)*20: LINE (170,yM-v)-STEP(2,v),l,b
  129. COLOR l,o
  130. WHILE v>l
  131.   PUT (xw1,yw1),Wheel%(o,Frame),PSET
  132.   SOUND 900,0.3,vol,o
  133.   SOUND 800,0.2,vol,l
  134.   LOCATE 14,5: Spin=Luck(Round,INT(RND(l)*24))
  135.   IF Spin>o THEN
  136.     PRINT USING "    #####    ";Spin;
  137.   ELSEIF Spin=-1 THEN
  138.     PRINT       "   Bankrupt  ";
  139.   ELSEIF Spin=-2 THEN
  140.     PRINT       " Loose a Turn";
  141.   ELSEIF Spin=-3 THEN
  142.     PRINT       "  Free Spin  ";
  143.   ELSEIF Spin=-4 THEN
  144.     PRINT       "    Prize!   ";
  145.   END IF
  146.   LINE (170,yM-v)-STEP(2,o),2: FOR t1=l TO ((yM-101-v)/20)^2: NEXT: v=v-l  
  147.   IF Frame<3 THEN Frame=Frame+l :ELSE Frame=o
  148. WEND
  149. IF Spin<o THEN WHILE INKEY$<>"": WEND
  150. RETURN
  151.  
  152.   Solved:
  153. COLOR 2,l: TurnSpd=9
  154. FOR lin=1 TO 4
  155.   a$=Puzzle$(lin)
  156.   FOR Ch=l TO LEN(a$)
  157.     Ch$=MID$(a$,Ch,l)
  158.     IF (INSTR(Cons$,Ch$) OR INSTR(Vowel$,Ch$)) THEN
  159.       IF NOT Used(ASC(Ch$)-64) THEN GOSUB TurnLtr'(Lin,Ch)
  160.     END IF
  161.   NEXT
  162. NEXT
  163. Total&(pNow)=Total&(pNow)+Score(pNow)    
  164. GOSUB ClrScore
  165. GOSUB FanFare
  166. CurPuz=CurPuz+l: LSET fPuzzle$=STR$(MaxPuz)+","+STR$(CurPuz)
  167. ON ERROR GOTO DiskLock1
  168. PUT #l,l
  169.   SolvedEnd:
  170. ON ERROR GOTO 0
  171. GOSUB NewPuzzle
  172. RETURN
  173.  
  174.   DiskLock1:
  175. WINDOW 2
  176. RESUME SolvedEnd
  177.  
  178.  
  179.   WaitBtn:
  180. WHILE MOUSE(o)=o AND Play
  181.   Kh$=INKEY$
  182.   IF Kh$<>"" THEN
  183.     b=(INSTR(KeyCmd$,UCASE$(Kh$))+l)\2
  184.     IF b=l THEN
  185.       GOSUB Help 
  186.     ELSEIF b>l THEN
  187.       BtnHit=b-2: GOTO WaitBtnEnd
  188.     END IF
  189.   END IF
  190. WEND
  191. IF Play THEN
  192.   mx=MOUSE(l): my=MOUSE(2)
  193.   FOR b=o TO nBtn
  194.     x=BtnX(b)*8-9: y=BtnY(b)*8-10: w=(LEN(Btn$(b))+2)*8: x2=x+w: y2=y+11
  195.     IF FNPtInBox(mx,my, x,y, x2,y2) THEN
  196.       GOSUB TrackBtn
  197.       IF Now THEN BtnHit=b: GOTO WaitBtnEnd
  198.     END IF
  199.   NEXT
  200. END IF
  201. BtnHit=m1
  202. WaitBtnEnd:
  203. RETURN
  204.  
  205.   TrackBtn:
  206. x=BtnX(b)*8-9: y=BtnY(b)*8-10: w=(LEN(Btn$(b))+2)*8: x2=x+w: y2=y+11
  207. GOSUB Tracker
  208. RETURN
  209.  
  210.   Tracker:
  211. Now=o: Was=o
  212. WHILE MOUSE(o)<o
  213.   Now=FNPtInBox(MOUSE(l),MOUSE(2), x,y, x2,y2)
  214.   IF Now<>Was THEN
  215.     CALL InvertBox(x,y,x2,y2)
  216.     Was=Now
  217.   END IF
  218. WEND
  219. IF Now THEN CALL InvertBox(x,y,x2,y2)
  220. RETURN
  221.  
  222. SUB InvertBox(x,y,x2,y2) STATIC
  223.   AREA(x,y): AREA(x2,y): AREA(x2,y2): AREA(x,y2): AREAFILL 1
  224. END SUB
  225.  
  226.   Strip:
  227. a$=UCASE$(a$): b$=""
  228. FOR i=l TO LEN(a$)
  229.   Ch$=MID$(a$,i,l)
  230.   IF INSTR(Cons$,Ch$) OR INSTR(Vowel$,Ch$) THEN b$=b$+Ch$
  231. NEXT
  232. a$=b$
  233. RETURN
  234.  
  235.   UseFile:
  236. WINDOW 2," Please enter the Puzzle File Name...",(o,o)-(631,16),o
  237. PRINT "Current Puzzle File: ";PuzFile$
  238. PRINT "    New Puzzle File? ";
  239. LINE INPUT a$
  240. WINDOW CLOSE 2
  241. IF a$<>"" THEN
  242.   CLOSE l
  243.   IF INSTR(a$,".")=o THEN a$=a$+".Puzzle"
  244.   b$=PuzFile$: PuzFile$=a$
  245.   ON ERROR GOTO CantUse
  246.   GOSUB OpenFile
  247.   GOTO SkipPuzzle
  248. ELSE
  249.   RETURN
  250. END IF
  251.  
  252.   CantUse:
  253. IF ERR=53 THEN
  254.   CALL BooBoo("I Can't find "+PuzFile$)
  255.   RESUME UseCurrent
  256. ELSE
  257.   GOTO Oops
  258. END IF  
  259.  
  260.   UseCurrent:
  261. ON ERROR GOTO 0
  262. PuzFile$=b$: GOSUB OpenFile
  263. GOTO SkipPuzzle
  264.  
  265.  
  266.   ShowAnswer:
  267. COLOR 2,l: TurnSpd=11
  268. FOR lin=l TO 4
  269.   a$=Puzzle$(lin): ln=LEN(a$)
  270.   FOR Ch=l TO ln
  271.     Ch$=MID$(a$,Ch,l)
  272.     IF INSTR(Cons$,Ch$) OR INSTR(Vowel$,Ch$) THEN
  273.       IF NOT Used(ASC(Ch$)-64) THEN GOSUB TurnLtr'(Lin,Ch)
  274.     END IF
  275.   NEXT
  276. NEXT
  277.   SkipPuzzle:
  278. GOSUB ClrScore
  279. CurPuz=CurPuz+l: LSET fPuzzle$=STR$(MaxPuz)+","+STR$(CurPuz)
  280. ON ERROR GOTO DiskLock2
  281. PUT #l,l
  282.   SkipPuzzleEnd:
  283. ON ERROR GOTO 0
  284. GOSUB NewPuzzle
  285. RETURN
  286.  
  287.   DiskLock2:
  288. WINDOW 1
  289. RESUME SkipPuzzleEnd
  290.  
  291.  
  292.   FanFare:
  293. j=o
  294.   FOR k=10 TO 15
  295.   PALETTE 2,j,j,j: j=l-j
  296.   FOR Frame=o TO 3
  297.     PUT (xw1,yw1),Wheel%(o,Frame),PSET
  298.     SOUND (k+Frame)*100,l,vol,l
  299.     FOR t1=o TO 80: NEXT
  300.   NEXT
  301.   NEXT
  302.  
  303.   FOR k=15 TO 10 STEP m1 
  304.   PALETTE 2,j,j,j: j=l-j
  305.   FOR Frame=3 TO o STEP m1
  306.     PUT (xw1,yw1),Wheel%(o,Frame),PSET
  307.     SOUND (k+Frame)*100,l,vol,l
  308.     FOR t1=o TO 80: NEXT
  309.   NEXT
  310.   NEXT
  311. PALETTE 2,o,o,o: Frame=o
  312. RETURN
  313.  
  314.  
  315.   NewPuzzle:
  316. FOR i=l TO 26: Used(i)=o: NEXT: noCons=o
  317. FOR i=o TO 116 STEP 4
  318.   LINE (316-i,51-i/4)-(316+i,51+i/4),o,bf
  319. NEXT
  320. COLOR l,o: LOCATE 5,32: PRINT "Creating Puzzle..."
  321. Cat$=STRING$(LEN(Cat$),32): GOSUB PrCat
  322.  
  323. IF CurPuz>MaxPuz OR CurPuz<2 THEN CurPuz=2
  324. GET #l,CurPuz: PuzLeft$=fPuzzle$: i=INSTR(PuzLeft$,"|")
  325. IF i=o THEN a$="Cant find '|'  Line"+STR$(CurPuz)+" <"+PuzLeft$+">": GOTO Oops
  326.  
  327. a$=MID$(PuzLeft$,  i+l)
  328. WHILE RIGHT$(a$,l)=Sp$: a$=LEFT$(a$,LEN(a$)-l): WEND
  329. IF LEFT$(a$,l)<>Sp$ THEN a$=Sp$+a$
  330. Cat$=a$+Sp$
  331. Puz$=UCASE$(LEFT$(PuzLeft$, i-l))
  332.  
  333. PuzLeft$="": PuzCons=o: PuzVow=o: a$=Puz$
  334. FOR i=l TO LEN(a$)
  335.   Ch$=MID$(a$,i,l)
  336.   IF INSTR(Cons$,Ch$) THEN
  337.     PuzLeft$=PuzLeft$+Ch$: PuzCons=PuzCons+l
  338.   ELSE
  339.     IF INSTR(Vowel$,Ch$) THEN PuzVow=PuzVow+l
  340.   END IF
  341. NEXT
  342. GOSUB WordWrap'(a$,Puzzle$)
  343. GOSUB Center
  344. GOSUB PrPuzzle
  345. a$=Puz$: GOSUB Strip: Puz$=a$
  346. RETURN
  347.  
  348.  
  349.   HasF:
  350. Yes=o
  351. IF Free(pNow) THEN
  352.   WINDOW 2,"Use Free Spin?",(0,0)-(380,16),0
  353.   PRINT "  You Have";Free(pNow);" Free Spins."
  354.   PRINT "  Would you like to use one now? (Y/N) ";: a$=INPUT$(l)
  355.   WINDOW CLOSE 2
  356.   IF UCASE$(LEFT$(a$,l))<>"N" THEN
  357.     Free(pNow)=Free(pNow)-1
  358.     p=pNow: GOSUB prScore
  359.     Yes=-1
  360.   END IF
  361. END IF
  362. RETURN
  363.  
  364.   PickCons:
  365. CALL Spread("","Please Select a Consonant."): WantVowel=o: GOTO PickLtr
  366.  
  367.   PickVowel:
  368. CALL Spread("","You may Select a Vowel now."): WantVowel=-1: GOTO PickLtr
  369.  
  370.   PickLtr:
  371. MENU ON
  372. WHILE MOUSE(o)=o AND Play
  373.   PickLtr2:
  374.   Kh$=INKEY$
  375.   IF Kh$=Hlp$ THEN
  376.     GOSUB Help
  377.   ELSEIF Kh$<>"" THEN
  378.     Kh$=UCASE$(Kh$)
  379.     IF INSTR(Vowel$,Kh$) OR INSTR(Cons$,Kh$) THEN
  380.       IF (NOT Hard) AND Used(ASC(Kh$)-64) THEN GOSUB Bleep: GOTO PickLtr2 
  381.       IF WantVowel THEN x=INSTR(Vowel$,Kh$) :ELSE x=INSTR(Cons$,Kh$) 
  382.       IF x THEN LtrHit=ASC(Kh$)-64: GOTO PickLtrEnd
  383.     ELSE
  384.       GOSUB Bleep
  385.     END IF
  386.   END IF
  387. WEND
  388. MENU OFF
  389. IF Play THEN
  390.   b=MOUSE(o): mx=MOUSE(l): my=MOUSE(2): mx2=(mx-3)\24: w=11
  391.   FOR b=mx2+l TO 26
  392.     IF WantVowel THEN x=INSTR(Vowel$,CHR$(b+64)) :ELSE x=INSTR(Vowel$,CHR$(b+64))=0
  393.     IF (Hard OR NOT Used(b)) AND (x<>o) THEN
  394.       x=6+(b-l)*24: x2=x+w: y=12*8-10: y2=y+10
  395.       IF FNPtInBox(mx,my, x,y, x2,y2) THEN
  396.         GOSUB Tracker
  397.         IF Now THEN LtrHit=b: GOTO PickLtrEnd
  398.       END IF
  399.     END IF
  400.   NEXT
  401.   GOTO PickLtr  
  402. END IF
  403. PickLtrEnd:
  404. RETURN
  405.  
  406.   CheckIt:
  407. Yes=o: TurnSpd=o
  408. IF NOT Used(LtrHit) THEN 
  409.   Ch$=CHR$(64+LtrHit): COLOR 2,l
  410.   FOR lin=l TO 4
  411.     a$=Puzzle$(lin)
  412.     FOR Ch=l TO LEN(a$)
  413.       IF MID$(a$,Ch,l)=Ch$ THEN
  414.         Yes=-1
  415.         GOSUB TurnLtr'(Lin,Ch)
  416.         IF WantVowel THEN
  417.           PuzVow=PuzVow-l
  418.         ELSE
  419.           PuzCons=PuzCons-l
  420.           Score(pNow)=Score(pNow)+Spin
  421.         END IF
  422.         p=pNow: GOSUB prScore        
  423.       END IF
  424.     NEXT
  425.   NEXT
  426.   Used(LtrHit)=-1
  427.   IF NOT Hard THEN LINE( ( (ASC(Ch$)-64) *3-2)*8,87 )-STEP(7,8),2,bf 
  428. END IF
  429. IF Yes=o THEN FailTune
  430. RETURN
  431.  
  432.   TurnLtr:
  433. x=((ASC(Ch$)-64)*3-2)*8-2: y=86
  434. x2=(26+(pLeft(lin)+Ch-l)*2)*8-2: y2=(lin*2+l)*8-2
  435. FOR i=5+TurnSpd TO 16
  436.   SOUND i*100,l,vol,o: SOUND i*100,l,vol,l
  437.   LINE (x2,y2)-STEP(11,10),l,bf
  438.   LINE (x2,y2)-STEP(11,10),2,bf
  439. NEXT
  440. FOR i=o TO 6
  441.   GET (x+i,y)-(x+i,y+10),TmpBit%
  442.   PUT (x2+i,y2),TmpBit%,PSET
  443.   GET (x+11-i,y)-(x+11-i,y+10),TmpBit%
  444.   PUT (x2+11-i,y2),TmpBit%,PSET
  445. NEXT
  446. RETURN
  447.  
  448.  
  449.   MenuDown:
  450. Menue=MENU(o): Item=MENU(l)
  451. IF Menue=l THEN
  452.   IF Item=l THEN
  453.     GOSUB EnterNames
  454.   ELSEIF Item=2 THEN
  455.     GOSUB ClrScore
  456.   ELSEIF Item=3 THEN
  457.     FOR p=l TO 4: Total&(p)=o: NEXT: GOSUB ClrScore
  458.   ELSEIF Item=5 THEN
  459.     Play=o
  460.   END IF
  461.  
  462. ELSEIF Menue=2 THEN
  463.   IF Item=l THEN
  464.     GOSUB EditFile
  465.   ELSEIF Item=2 THEN
  466.     GOSUB UseFile
  467.   ELSEIF Item=4 THEN
  468.     GOSUB SkipPuzzle
  469.   ELSEIF Item=5 THEN
  470.     GOSUB ShowAnswer
  471.   END IF
  472.  
  473. ELSEIF Menue=3 THEN
  474.   IF Item=l THEN
  475.     Talk= NOT Talk
  476.     MENU 3,l,l-Talk
  477.     IF Talk THEN SAY(TRANSLATE$("OK")) :ELSE SAY(TRANSLATE$("I will shut up."))
  478.   ELSEIF Item=2 THEN
  479.     Clue=NOT Clue
  480.     MENU 3,2,l-Clue
  481.     GOSUB PrCat
  482.   ELSEIF Item=3 THEN
  483.     Hard=NOT Hard
  484.     MENU 3,3,2+Hard
  485.     GOSUB dLetters
  486.   ELSEIF Item=5 THEN
  487.     GOSUB Help
  488.   ELSEIF Item=6 THEN
  489.     GOSUB Share
  490.   END IF
  491. END IF
  492. RETURN
  493.  
  494.   MouseDown:
  495. TIMER OFF: MENU OFF
  496. Btn=MOUSE(o): MouseX=MOUSE(l): MouseY=MOUSE(2)
  497. IF MouseY>101 THEN
  498.   IF MouseX<178 THEN
  499.     v=o
  500.     WHILE MOUSE(o)
  501.       IF yM-v>103 THEN v=v+l: LINE (170,yM-v)-STEP(2,0),l
  502.       FOR i=l TO 50: NEXT
  503.     WEND
  504.     IF v<30 THEN v=30: LINE (170,yM-v)-STEP(2,v),l,b
  505.     GOSUB Spin
  506.   END IF
  507. END IF
  508. RETURN
  509.  
  510.  
  511.   ClrScore:
  512. FOR p=l TO 4: Score(p)=o: GOSUB prScore: NEXT
  513. RETURN
  514.  
  515.  
  516.   EnterNames:
  517. FOR p=l TO 6
  518.   LOCATE 15,52: COLOR l+(p MOD 2),2: PRINT ">>";
  519.   FOR zz=o TO 2000: NEXT
  520. NEXT
  521. FOR p=l TO 4
  522.   LOCATE 14+p,52: COLOR l,2: INPUT n$
  523.   IF n$<>"" THEN Who$(p)=n$
  524.   Who$(p)=LEFT$(Who$(p),25) 
  525.   LOCATE 14+p,52: PRINT "  ";Who$(p);STRING$(25-LEN(Who$(p)),32);
  526.   IF p=pNow THEN GOSUB prName
  527. NEXT
  528. RETURN
  529.  
  530.  
  531.   GetWord:
  532. ln=INSTR(l,a$,Sp$)
  533. IF ln THEN w$=LEFT$(a$,ln-l): a$=MID$(a$,ln+l): ln=ln-l
  534. RETURN
  535.  
  536.   Pad:
  537. IF LEN(p$)<14 THEN 'can still add space
  538.   p$=p$+Sp$
  539. ELSE
  540.   Puzzle$(nLin)=p$: nLin=nLin+l: p$=""
  541. END IF
  542. RETURN
  543.  
  544.   UnPad:
  545. IF RIGHT$(p$,l)=Sp$ THEN p$=LEFT$(p$,LEN(p$)-l)
  546. Puzzle$(nLin)=p$
  547. IF nLin<4 THEN
  548.   nLin=nLin+l
  549. ELSE
  550.   a$="Puzzle too long!  <"+Puz$+">"
  551.   GOTO Oops
  552. END IF
  553. RETURN
  554.  
  555.   WordWrap:
  556. FOR i=l TO 4: Puzzle$(i)="": NEXT
  557. WHILE RIGHT$(a$,l)=Sp$: a$=LEFT$(a$,LEN(a$)-l): WEND
  558. IF RIGHT$(a$,l)<>Sp$ THEN a$=a$+Sp$
  559. nLin=l: p$=""
  560. GOSUB GetWord 'a$-->w$,ln
  561. WHILE ln
  562.   IF ln<=(14-LEN(p$)) THEN '<< Can still append
  563.     p$=p$+w$: GOSUB Pad
  564.   ELSE                     '<< New word won't fit
  565.     GOSUB UnPad
  566.     p$=w$: GOSUB Pad       '<< Put on new line
  567.   END IF
  568.   GOSUB GetWord
  569. WEND
  570. GOSUB UnPad
  571. IF Puzzle$(3)="" THEN
  572.   FOR i=3 TO l STEP m1: Puzzle$(i+l)=Puzzle$(i): NEXT
  573.   Puzzle$(l)=""
  574. END IF
  575. RETURN
  576.  
  577.   Center:
  578. FOR i=l TO 4
  579.   pLeft(i)=(14-LEN(Puzzle$(i)))/2  
  580. NEXT
  581. RETURN
  582.  
  583.   SavePrefs:
  584. ON ERROR GOTO CantSave
  585. OPEN "Wheel.Preferences" FOR OUTPUT AS 4
  586. FOR i=l TO 4
  587.   PRINT #4,Who$(i)
  588.   PRINT #4,Total&(i)
  589. NEXT
  590. PRINT #4,vol,Hard, Clue, Talk
  591. PRINT #4,PuzFile$
  592.   SavePrefsEnd:
  593. CLOSE 4
  594. LOCATE 11,33: COLOR 2,1: PRINT " See you later! ": COLOR 1,0
  595. RETURN
  596.  
  597.   CantSave:
  598. RESUME SavePrefsEnd
  599.  
  600.  
  601.   dLetters:
  602. LINE (o,84)-STEP(xm-2,15),l,b: COLOR 2,l
  603. FOR i=l TO 26
  604.   LINE ((i*3-2)*8-2,86)-STEP(11,10),l,bf
  605.   LOCATE 12,i*3-l: PRINT CHR$(64+i);
  606.   IF (NOT Hard) AND Used(i) THEN LINE ((i*3-2)*8,87)-STEP(7,8),2,bf
  607. NEXT
  608. RETURN
  609.  
  610.  
  611.   PrCat:
  612. Lft=40-LEN(Cat$)\2
  613. LINE (Lft*8-8,7)-STEP(LEN(Cat$)*8,10),2,bf
  614. LINE (Lft*8-9,6)-STEP(LEN(Cat$)*8+2,10),3,b
  615. IF Clue THEN COLOR l,2: LOCATE 2,Lft: PRINT Cat$;
  616. RETURN
  617.  
  618.  
  619.   PrPuzzle:
  620. GOSUB PrCat
  621. PATTERN &Hffff,Pat: COLOR 1,0: LINE (200,20)-(432,82),1,bf
  622. PATTERN &Hffff,Solid
  623. COLOR 2,l: k=l
  624. FOR i=4 TO 11 STEP 2
  625.   a$=Puzzle$(k): a=pLeft(k): k=k+l: ln=LEN(a$)
  626.   FOR j=o TO 13
  627.     x=(26+(a+j)*2)*8-2: y=(i-l)*8-2: b$=MID$(a$,j+l,l)
  628.     IF j<ln AND b$<>Sp$ THEN
  629.       IF INSTR(Cons$,b$) OR INSTR(Vowel$,b$) THEN
  630.         LINE (x,y)-STEP(11,10),2,bf
  631.         LINE (x,y)-STEP(11,10),l,b
  632.       ELSE
  633.         LINE (x,y)-STEP(11,10),1,bf
  634.         LOCATE i,27+(a+j)*2: PRINT b$;
  635.       END IF
  636.     END IF
  637.   NEXT
  638. NEXT
  639. GOSUB dLetters
  640. RETURN
  641.  
  642.  
  643.   prScore:
  644. LOCATE 14+p,24: COLOR 1,2
  645. PRINT USING "$$#,###,###  $$###,###   ##   ";Total&(p),Score(p),Free(p);
  646. GOSUB prName                             
  647. RETURN
  648.  
  649.   prName:
  650. IF p=pNow THEN COLOR 3,1 :ELSE COLOR 1,2
  651. LOCATE 14+p,54: PRINT Who$(p);
  652. RETURN
  653.  
  654.  
  655.   Oops:
  656. LOCATE 1,1: PRINT a$
  657. PRINT "Error Code =";ERR
  658. PRINT "Press <RETURN> to Continue";: a$=INPUT$(1)
  659.  
  660.   CleanUp:
  661. MOUSE OFF: TIMER OFF: MENU OFF: MENU RESET
  662. IF Talk THEN SAY TRANSLATE$("Bye Bye")
  663. WINDOW OUTPUT 1
  664. WINDOW CLOSE 2
  665. WINDOW 1," Wheel",(0,0)-(617,186),15
  666. LOCATE 11,32: COLOR 2,1: PRINT " Saving Scores... "
  667. CLOSE 1: CLOSE 5
  668. GOSUB SavePrefs
  669. END
  670.  
  671.  
  672.   ConvertFile:
  673. Src$="Wheel.TXT": Count=0
  674. PRINT "Your Original TEXT filename: [";Src$;"]  ";
  675. INPUT a$: IF a$<>"" THEN Src$=a$
  676. ON ERROR GOTO CloseFil
  677. OPEN Src$ FOR INPUT AS #2
  678.  
  679. IF INSTR(Src$,".") THEN Src$=LEFT$(Src$,INSTR(Src$,".")-1)
  680.   cLoop:
  681. Dst$=Src$+".Puzzle"
  682. PRINT "Destination PUZZLE filename: [";Dst$;"]  ";
  683. INPUT a$: IF a$<>"" THEN Dst$=a$
  684. IF INSTR(a$,".")=o THEN a$=a$+".Puzzle"
  685. IF UCASE$(a$)=UCASE$(PuzFile$) THEN
  686.   PRINT "Please name it something else.  We are using '";a$;"' now."
  687.   GOTO cLoop 
  688. END IF
  689.  
  690. PRINT "Converting";
  691. OPEN "R",3,Dst$,80
  692. FIELD #3, 80 AS fPuzzle$
  693.  
  694. loop:
  695.   LINE INPUT #2,a$
  696.   IF LEN(a$)>79 THEN
  697.     CALL ConvertErr("Line too long: ("+a$+")")
  698.   ELSEIF INSTR(a$,"|")=0 THEN
  699.     CALL ConvertErr("Missing '|': ("+a$+")")
  700.   ELSE
  701.     Count=Count+1
  702.     LSET fPuzzle$=a$: PUT #3,Count+1
  703.     PRINT ".";: IF (Count MOD 70)=o THEN PRINT
  704.   END IF
  705. GOTO loop
  706.                     
  707. CloseFil:
  708. WINDOW 2
  709. IF ERR=62 THEN
  710.   LSET fPuzzle$=STR$(Count)+","+STR$(2): PUT #3,1
  711.   CLOSE 2
  712.   CLOSE 3
  713.   RESUME EndConvert
  714. ELSEIF ERR=53 THEN
  715.   a$="File Not Found": RESUME Oops
  716. ELSE
  717.   a$="Oops File error!"+STR$(ERR): RESUME Oops
  718. END IF
  719.   
  720. EndConvert:
  721.   ON ERROR GOTO 0
  722.   PRINT
  723.   PRINT Count;"lines Converted."
  724.   PRINT " Press any key to Continue...";
  725.   WHILE MOUSE(o)=o AND INKEY$="": WEND
  726. RETURN
  727.  
  728. SUB BooBoo(Txt$) STATIC
  729.   WINDOW 3,"Error...",(0,0)-(631,9),0
  730.   PRINT Txt$;
  731.   WHILE MOUSE(0)=0 AND INKEY$="": WEND
  732.   WINDOW OUTPUT 1
  733.   WINDOW CLOSE 3  
  734. END SUB
  735.  
  736.  
  737.   EditFile:
  738. WINDOW 2,"  Convert Puzzle File",(o,o)-(631,100),o
  739. PRINT " I have yet to find the time to do a puzzle editor, and I'm sure you all
  740. PRINT " would like to enter your own puzzles, and swap puzzle files with
  741. PRINT " your friends, so if you pardon this very long sentence, I present you
  742. PRINT " a temporary solution:
  743. PRINT "   1. Create a TEXT file using Ed / AEdit / Emacs, or any Text Editor.
  744. PRINT "      The format goes like this:
  745. PRINT "          Celibacy is not hereditary|Phrase
  746. PRINT "      One puzzle per line; the Puzzle, a vertical bar, and the clue.
  747. PRINT "      (TYPE Wheel.TXT for examples.)
  748. PRINT "   2. Select Convert Puzzle File, and follow the instructions.
  749. PRINT
  750. INPUT "Do you have a TEXT File ready for conversion";a$
  751. IF LEFT$(UCASE$(a$),l)="Y" THEN
  752.   GOSUB ConvertFile
  753. END IF 
  754. WINDOW OUTPUT 1
  755. WINDOW CLOSE 2
  756. RETURN
  757.  
  758.   Spread:
  759. SUB Spread(Who$,a$) STATIC
  760. SHARED Talk
  761.   M0=26: Mw=51: m=Mw\2: ln=LEN(a$): p=(Mw-ln)\2: y=22
  762.   a$=STRING$(p,32)+a$+STRING$(Mw-p-ln,32)
  763.   FOR i=0 TO m-1
  764.     LOCATE y,M0+m-i: PRINT MID$(a$,m-i,1);
  765.     LOCATE y,M0+m+i: PRINT MID$(a$,m+i,1);
  766.   NEXT
  767.   IF Talk AND (LOC(5)=0) THEN
  768.     i=INSTR(a$,"Consonant")
  769.     IF i THEN a$=LEFT$(a$,i-1)+"Konsenant"
  770.     SAY TRANSLATE$(Who$+","+a$)
  771.   END IF
  772. END SUB
  773.  
  774.   Help:
  775. WINDOW 2,"  Hi There!",(o,o)-(631,16*8),o
  776. PRINT " This game comes with the best instruction manual you'll ever find!
  777. PRINT "   It will take you about half an hour to study it, but I promise you
  778. PRINT " it will be quite entertaining.  Watch it on TV!
  779. PRINT " You have a TV don't you?  I'm sure you do, even the FlintStones had one.
  780. PRINT
  781. PRINT " Anyway, here's a list of short-cuts and features:
  782. PRINT "  - In addition to clicking on the screen you may also use the keyboard:
  783. PRINT "      S=Spin   B=Buy Vowel   +/-=volume   ESC=Solve the Puzzle.
  784. PRINT "      any alphabetic key to select Consonants/Vowels.
  785. PRINT "  - Up to 4 players may play at once.
  786. PRINT "      Change the rest of the player's name to '-' if less than 4 players.
  787. PRINT "  - Punctuations are ignored when you SOLVE the puzzle.
  788. PRINT "  - Player names, Total scores, Volume, and other parameters are saved
  789. PRINT "     in a file named 'Wheel.Preferences' for the next time you play.
  790. PRINT   
  791. PRINT TAB(22);: GOSUB Continue
  792. RETURN
  793.  
  794.  
  795. SUB ConvertErr(Txt$) STATIC
  796.   PRINT: PRINT Txt$
  797.   PRINT "Press any key to continue...";
  798.   WHILE MOUSE(0)=0 AND INKEY$="": WEND
  799. END SUB
  800.  
  801.  
  802.   Share:
  803. WINDOW 2," About ShareWare...",(10,40)-(621,40+11*8),o
  804. PRINT " This program is distributed as ShareWare, you may copy it, give it away,
  805. PRINT "  or do anything else with it except sell it.
  806. PRINT " If you enjoy this program , any contribution is appreciated.
  807. PRINT " I would also like to hear your suggestions.
  808. PRINT
  809. PRINT " Please send your Checks, and Suggestions to:
  810. PRINT "    Hari Wiguna
  811. PRINT "    1315 F Apt #6
  812. PRINT "    Lincoln, NE 68508"
  813. PRINT TAB(50);"Thank You Very Much!"
  814. GOSUB Continue
  815. RETURN
  816.  
  817.  
  818.   Continue:
  819. PRINT "Press any key to continue...";
  820. WHILE MOUSE(o)=o AND INKEY$="": WEND
  821. WINDOW OUTPUT 1
  822. WINDOW CLOSE 2
  823. RETURN
  824.  
  825.   Bleep:
  826. RETURN
  827. SOUND 700,l,vol,2
  828. SOUND 700,l,vol,3
  829. RETURN
  830.  
  831.  
  832.   InitCode:
  833. GOSUB InitVars
  834. GOSUB InitFile
  835. GOSUB InitMenus
  836. GOSUB InitMouse
  837. GOSUB InitBoard
  838. RETURN
  839.  
  840.   InitVars:
  841. CLS: LOCATE 11,32: COLOR 2,1: PRINT " Excuse me... "
  842. DEF FNPtInBox(x,y, x1,y1,x2,y2) = x>x1 AND x<x2 AND y>y1 AND y<y2
  843. o=0: l=1: m1=-l: pi2!=710/113: Play=m1
  844. Sp$=" ": Vowel$="AIUEO": Cons$="BCDFGHJKLMNPQRSTVWXYZ"
  845. Hlp$=CHR$(139): KeyCmd$=Hlp$+"?S B"+CHR$(8)+ CHR$(27)+CHR$(13)+ "-_+="
  846. DIM Pat(3): Pat(0)=&H9249: Pat(l)=&H4992: Pat(2)=&H9249: Pat(3)=&H4992
  847. DIM Solid(3): FOR i=o TO 3: Solid(i)=&Hffff: NEXT
  848. DIM TmpBit%( 3+INT((16+31)/16)*(l+11)*2 )
  849. DIM Total&(4),Score(4),Who$(4),Free(4)
  850. DIM Puzzle$(4),pLeft(4),Used(26)
  851. i=4: DIM Btn$(i),BtnX(i),BtnY(i): nBtn=i
  852.  
  853.   Values:
  854. DIM Luck(3,23)
  855. FOR Round=l TO 3
  856.   FOR i=o TO 23
  857.     READ Luck(Round,i)
  858.   NEXT
  859. NEXT
  860. Round=3
  861. DATA 1000,500,400,300,2000,-3,700,200,150,450,-2,200,400,250,150,400,600,250,350,-1,750,800,300,200
  862. DATA -1,900,300,250,900,200,400,550,1000,200,600,-1,200,550,400,900,250,-4,700,800,300,-2,2000,700
  863. DATA -1,-1,-2,-3,150,900,300,250,900,200,400,550,1000,200,600,200,550,400,900,700,800,300,2000,700
  864.  
  865.   Prefs:
  866. pMax=3
  867. Who$(1)="Tony"
  868. Who$(2)="Jackie"
  869. Who$(3)="-"
  870. Who$(4)="-"
  871. vol=255: vs=25
  872. Hard=o: Clue=m1: Talk=o
  873. PuzFile$="Wheel.Puzzle"
  874.  
  875. ON ERROR GOTO NoPref
  876. OPEN "Wheel.Preferences" FOR INPUT AS 4
  877. FOR i=l TO 4
  878.   LINE INPUT #4,Who$(i)
  879.   INPUT #4,Total&(i)
  880. NEXT
  881. INPUT #4,vol, Hard, Clue, Talk
  882. LINE INPUT #4,PuzFile$
  883.   PrefEnd:
  884. CLOSE 4
  885. ON ERROR GOTO 0
  886. RETURN
  887.  
  888.   NoPref:
  889. RESUME PrefEnd
  890.  
  891.   
  892.   InitFile:
  893. OPEN "KYBD:" FOR INPUT AS 5
  894. ON ERROR GOTO CantOpen
  895.  
  896.   OpenFile:
  897. OPEN PuzFile$ FOR INPUT AS 1: CLOSE 1
  898. OPEN "R",l,PuzFile$,80
  899. FIELD #l, 80 AS fPuzzle$
  900. GET #l,l: i=INSTR(fPuzzle$,",")
  901. MaxPuz=VAL(LEFT$(fPuzzle$,i-l))
  902. CurPuz=VAL(MID$ (fPuzzle$,i+l))
  903. ON ERROR GOTO 0
  904. RETURN
  905.  
  906.   CantOpen:
  907. IF ERR=53 THEN
  908.   a$="I can't find "+PuzFile$ 
  909. ELSE
  910.   a$="Can't Open (Bad Puzzle File?)  Throwing away 'Wheel.Preferences' might help."
  911. END IF
  912. RESUME Oops
  913.  
  914.  
  915.   InitMenus:
  916. MENU l,o,l," Players "
  917. MENU l,l,l,"Enter Names "
  918. MENU l,2,l,"Clear Scores"
  919. MENU l,3,l,"Clear Totals"
  920. MENU l,4,o,"------------"
  921. MENU l,5,l,"QUIT        "
  922.  
  923. MENU 2,o,l," Puzzle "
  924. MENU 2,l,l,"CONVERT File...  "
  925. MENU 2,2,l,"Use Another File "
  926. MENU 2,3,o,"-----------------"
  927. MENU 2,4,l,"Skip This Puzzle "
  928. MENU 2,5,l,"Show Answer      "
  929.  
  930. MENU 3,o,l," Options "
  931. MENU 3,l,l-Talk,"  Speech            "
  932. MENU 3,2,l-Clue,"  Clue              "
  933. MENU 3,3,2+Hard,"  Hide Used Letters "
  934. MENU 3,4,o,     "--------------------"
  935. MENU 3,5,l,     "  Help...           "
  936. MENU 3,6,l,     "  About ShareWare..."
  937.  
  938. FOR i=4 TO 9
  939.   MENU i,o,o,""
  940. NEXT
  941. ON MENU GOSUB MenuDown
  942. RETURN
  943.  
  944.  
  945.   InitMouse:
  946. ON MOUSE GOSUB MouseDown
  947. RETURN
  948.  
  949.  
  950.   InitBoard:
  951. WINDOW 1," WHEEL OF FORTUNE ",(0,1)-(631,186),14+16
  952. xm=WINDOW(2): yM=WINDOW(3): cM=WINDOW(6)
  953. COLOR 1,2: CLS
  954.  
  955.   dPuzzle:
  956. x=243: y=50: r=110: r2=r-30: r3=r-20: x3=xm-x: i=0
  957. IF Debug THEN St!=pi2! :ELSE St!=0.03
  958. FOR s!=0 TO pi2! STEP St!
  959.   x2=COS(s!)*r: y2=SIN(s!)*r/2.25
  960.   LINE (x,y)-STEP(x2,y2),i
  961.   LINE (x3,y)-STEP(x2,y2),i
  962.   IF i<3 THEN i=i+1 :ELSE i=0
  963. NEXT s!
  964. LINE (o,84)-STEP(619,20),2,bf
  965. GOSUB NewPuzzle
  966.            
  967.   dButtons:
  968. i=0: Btn$(i)="   Spin    ": BtnX(i)=3: BtnY(i)=5:GOSUB DrawBtn 
  969. i=1: Btn$(i)="Buy a Vowel": BtnX(i)=3: BtnY(i)=7:GOSUB DrawBtn 
  970. i=2: Btn$(i)="Solve Puzzle": BtnX(i)=65: BtnY(i)=5:GOSUB DrawBtn 
  971. i=3: Btn$(i)=" - ": BtnX(i)=65: BtnY(i)=7:GOSUB DrawBtn 
  972. i=4: Btn$(i)=" + ": BtnX(i)=74: BtnY(i)=7:GOSUB DrawBtn
  973.  
  974.   'Speaker
  975. LINE (555,49)-(561,54),3,b
  976. LINE (561,49)-(569,46),3: LINE -STEP(0,11),3: LINE -(561,54),3 
  977.   'Noise
  978. LINE (572,51)-STEP(6,0),3
  979. LINE (572,48)-STEP(8,-4),3
  980. LINE (572,55)-STEP(8,4),3
  981.  
  982.   dNotice:
  983. LINE (183,148)-(xm-3,yM-1),l,b
  984. LOCATE 20,25: COLOR l,2: PRINT "Whipped up by ";
  985. COLOR 3,2: PRINT "Hari Wiguna.";: COLOR l,2
  986. LOCATE 21,25: PRINT " If you enjoy this ShareWare program,
  987. LOCATE 22,25: PRINT "  and if you're a really nice person,
  988. LOCATE 23,25: PRINT "    you'd probably send me a few bucks.   ";
  989. COLOR 3,2: PRINT "Thanks!";
  990.  
  991.   dScore:
  992. LINE (183,101)-(xm-3,146),1,b
  993. LOCATE 14,30: COLOR 3,2
  994. PRINT "TOTAL      SCORE  FREE  PLAYER'S NAME"
  995. pNow=1
  996. FOR p=1 TO 4
  997.   GOSUB prScore
  998. NEXT
  999.  
  1000.   dWheel:
  1001. LINE (o,100)-(178,yM),2,bf
  1002. LINE (2,101)-(178,yM-l),l,b
  1003. LOCATE 14,5: COLOR 3,2: PRINT "Making Wheel..."
  1004. xw1=18: yw1=117: xw2=161: yw2=181
  1005. i=3+INT((16+xw2-xw1)/16)*(l+yw2-yw1)*2
  1006. DIM Wheel%(i,3)
  1007. IF Debug THEN s!=2*pi2! :ELSE s!=pi2!/20
  1008. xc=90: yc=149: r!=70: s3!=s!/2: ss!=s3!/5
  1009. FOR i=o TO 3
  1010.   LINE (xw1,yw1)-(xw2,yw2),2,bf
  1011.   c=l
  1012.   FOR a!=s3!*i TO pi2!+s3!*i STEP s!
  1013.     FOR b!=a! TO a!+s! STEP ss!
  1014.       x=COS(b!)*r!: y=SIN(b!)*r!/2.25
  1015.       LINE (xc,yc)-STEP(x,y),c
  1016.     NEXT              
  1017.     c=4-c
  1018.   NEXT
  1019.   SOUND 1700,4,vol,o: SOUND 1700,4,vol,l
  1020.   GET (xw1,yw1)-(xw2,yw2),Wheel%(0,i)
  1021. NEXT
  1022.  
  1023. LINE (20,103)-STEP(134,9),l,bf
  1024. LOCATE 14,5: COLOR l,o: PRINT "  I'm Ready!  "
  1025.  
  1026.   eNotice:
  1027. IF Talk THEN
  1028.   SAY TRANSLATE$("Let's play a game!")
  1029. ELSE
  1030.   FOR i=100 TO 2000 STEP 100
  1031.     SOUND i,0.5,vol,o: SOUND i,0.5,vol,l
  1032.   NEXT
  1033. END IF
  1034. FOR i=160 TO 168
  1035.   FOR j=i TO yM-2 STEP 8
  1036.     LINE (184,j)-(xm-4,j),2
  1037.   NEXT j
  1038.   FOR j=o TO 450: NEXT
  1039. NEXT i
  1040.  
  1041. RETURN
  1042.  
  1043.   DrawBtn:
  1044. LINE (BtnX(i)*8-9,BtnY(i)*8-10)-STEP((LEN(Btn$(i))+2)*8,11),0,bf
  1045. LINE (BtnX(i)*8-9,BtnY(i)*8-10)-STEP((LEN(Btn$(i))+2)*8,11),1,b
  1046. LOCATE BtnY(i),BtnX(i)+1: COLOR 1,0: PRINT Btn$(i);
  1047. RETURN
  1048.  
  1049.  
  1050.   MouseSpot:
  1051. WHILE MOUSE(o)=o
  1052.   LOCATE 2,1
  1053.   PRINT USING "### ### ###";MOUSE(1),MOUSE(2);
  1054. WEND
  1055. RETURN
  1056.  
  1057.   EndInitCode:
  1058.